/**
 * @Author Stringzhua
 * @Date 2024/1/13 18:44
 * description:java的浮点型常量(具体值)默认为double型
 * 声明float型常量,需后加'f'或'F'
 */
public class FloatDetail {
    public static void main(String[] args) {
        //float num1 = 1.1;//错误
        float num2 = 1.1f;//对
        double num3 = 1.1;//对
        double num4 = 1.1f;//正确

        //十进制数形式:如:5.12 512.0f   .512(必须有小数点)
        double num5 = .123;//等价于0.123
        System.out.println(num5);
        //科学计数法形式:如5.12e2 [5.12^10的2次方]      5.12e-2  [5.12^10的-2次方]
        System.out.println(5.12e2);//512.0
        System.out.println(5.12e-2);//0.0512

        //通常情况下,应该使用double型,因为它比float型更精确
        //举例说明   double num9 = 2.12345678912   float num10 = 2.12345678912f
        double num9 = 2.12345678912;
        float num10 = 2.12345678912f;
        System.out.println(num9);
        System.out.println(num10);

        //浮点数使用陷阱，2.7和8.1/3比较
        //看看一段代码
        double num11=2.7;
        double num12=8.1/3;
        System.out.println(num11);//2.7
        System.out.println(num12);//2.6999999999999997
        //得到一个重要的使用点:当我们对运算结果是小数的进行相等判断时,要小心
        //解决办法:要以两个数的差值的绝对值,在某个精度范围内判断
        if(num11 == num12){
            System.out.println("相等");
        }
        if(Math.abs(num11 - num12)<0.000001){
            System.out.println("差值非常小,到我的规定精度,认为相等");
        }
        //正确的写法
        System.out.println(Math.abs(num11 - num12));//4.440892098500626E-16
        //细节:如果是直接查询得的小数或者直接赋值,是可以判断相等
    }
}
